/******************************************
Nodo.java
Universidad del Valle de Guatemala
Algoritmos y Estructura de Datos
Autor:
    Martín Guzmán
Fecha: 30 de septiembre de 2009
Descripción: Conteiene referencias a las
 * distintas ramificaciones de un determinado
 * árbol 2-3. Tiene un hijo derecho, uno
 * izquierdo, uno de en medio, una referencia
 * a los 2 padres (derecho e izquierdo) y un
 * nombre (o bien valor)
*******************************************/

public class Nodo<G> {
    private G nombre;
    private Nodo<G> padre_der;
    private Nodo<G> padre_izq;
    private Nodo<G> hijo_derecho;
    private Nodo<G> hijo_enmedio;
    private Nodo<G> hijo_izquierdo;

    public Nodo(G nombre) {
        this.nombre=nombre;
        this.hijo_derecho= new Nodo<G>();
        this.hijo_izquierdo= new Nodo<G>();
        this.hijo_enmedio= new Nodo<G>();
        this.padre_der= new Nodo<G>();
        this.padre_izq= new Nodo<G>();
    }

    private Nodo() {

    }


    public String toString() {
        String temp=getNombre().toString();
        return temp;
    }

    public String Mostrar_Nodo() {

        String temp="";
        if(this.hijo_derecho.getNombre()!=null){
            temp+=this.hijo_derecho.Mostrar_Nodo()+",";
        }

        if(this.getNombre()!=null){
            temp+=this.getNombre()+",";
        }

        if(this.hijo_izquierdo.getNombre()!=null){
            temp+=this.hijo_izquierdo.Mostrar_Nodo();
        }

        return temp;
    }


    /**
     * @return the nombre
     */
    public G getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(G nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the padre_der
     */
    public Nodo<G> getPadre_der() {
        return padre_der;
    }

    /**
     * @param padre_der the padre_der to set
     */
    public void setPadre_der(Nodo<G> padre_der) {
        this.padre_der = padre_der;
    }

    /**
     * @return the padre_izq
     */
    public Nodo<G> getPadre_izq() {
        return padre_izq;
    }

    /**
     * @param padre_izq the padre_izq to set
     */
    public void setPadre_izq(Nodo<G> padre_izq) {
        this.padre_izq = padre_izq;
    }

    /**
     * @return the hijo_derecho
     */
    public Nodo<G> getHijo_derecho() {
        return hijo_derecho;
    }

    /**
     * @param hijo_derecho the hijo_derecho to set
     */
    public void setHijo_derecho(Nodo<G> hijo_derecho) {
        this.hijo_derecho = hijo_derecho;
    }

    /**
     * @return the hijo_enmedio
     */
    public Nodo<G> getHijo_enmedio() {
        return hijo_enmedio;
    }

    /**
     * @param hijo_enmedio the hijo_enmedio to set
     */
    public void setHijo_enmedio(Nodo<G> hijo_enmedio) {
        this.hijo_enmedio = hijo_enmedio;
    }

    /**
     * @return the hijo_izquierdo
     */
    public Nodo<G> getHijo_izquierdo() {
        return hijo_izquierdo;
    }

    /**
     * @param hijo_izquierdo the hijo_izquierdo to set
     */
    public void setHijo_izquierdo(Nodo<G> hijo_izquierdo) {
        this.hijo_izquierdo = hijo_izquierdo;
    }



}
